
///Этот код использует маршалинг для вызова функций из библиотеки user32.dll, которая предоставляет доступ к функциям Windows API. В частности, он использует функции для установки позиции курсора мыши и имитации нажатия и отпускания левой кнопки мыши.
///
///В методе Main() происходит следующее:
///
///1. Определяется ширина и высота экрана.
///2. Вычисляется центр экрана.
///3. Для каждой точки в радиусе 250 от центра экрана, позиция курсора мыши устанавливается на эту точку.
///4. Затем происходитк левой кнопкой мыши в центре экрана, с задержкой в 100 миллисекунд между каждым кликом.
///5. После этого происходит задержка в 60 секунд (1 минута), и цикл повторяется.
///6. Таким образом, этот код созда эффект врающегося курсора мыши вокруг центра экрана и имитирует нажатие левой кнопки мыши каждые 60 секунд.

using System.Runtime.InteropServices;

class MouseControlClick
{
    [DllImport("user32.dll")]
    public static extern bool SetCursorPos(int x, int y);

    [DllImport("user32.dll")]
    public static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

    [DllImport("user32.dll")]
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);

    [DllImport("user32.dll")]
    public static extern int GetSystemMetrics(int nIndex);

    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        public int X;
        public int Y;
    }

    const int MOUSEEVENTF_LEFTDOWN = 0x02;
    const int MOUSEEVENTF_LEFTUP = 0x04;
    const int SM_CXSCREEN = 0;
    const int SM_CYSCREEN = 1;

    static void Main()
    {
        while (true)
        {
			ControlMouse();
			Thread.Sleep(60000); // Задержка в 60 секунд (1 минута)
		}
    }
    
    /// Управление мышью
	static void ControlMouse()
	{
		//движение по кругу в центре экрана
		int screenWidth = GetSystemMetrics(SM_CXSCREEN);
        int screenHeight = GetSystemMetrics(SM_CYSCREEN); 
        int centerX = screenWidth / 2;
        int centerY = screenHeight / 2;

        for (int i = 0; i < 360; i++)
        {
			Thread.Sleep(10);
            int x = (int)(centerX + 250 * Math.Cos(i * Math.PI / 180));
            int y = (int)(centerY + 250 * Math.Sin(i * Math.PI / 180));

            SetCursorPos(x, y);
        }
		
		//клик в центре экрана
        mouse_event(MOUSEEVENTF_LEFTDOWN, (uint)centerX, (uint)centerY, 0, 0);
        Thread.Sleep(100);
        mouse_event(MOUSEEVENTF_LEFTUP, (uint)centerX, (uint)centerY, 0, 0);
        Thread.Sleep(100);
	}
}